# -*- coding:utf-8 -*-
# bs4解析对象
# 创建 BS4 解析对象是万事开头的第一步，这非常地简单，语法格式如下所示:
"""
#导入解析包
from bs4 import BeautifulSoup
#创建beautifulsoup解析对象
soup = BeautifulSoup(response, 'lxml')
"""

from bs4 import BeautifulSoup


html_doc = """
<html><head><title>The Dormouse's story</title></head>
    <body>
        <p class="title"><b>The Dormouse's story</b></p>
        <p class="story">Once upon a time there were three little sisters; and their names were
            <a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
            <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
            <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
            and they lived at the bottom of a well.
             <a href="http://example.com/tillie">Bob</a>;
        </p>

<p class="story">...</p>
"""

soup = BeautifulSoup(html_doc, "lxml")

# 使用bs4格式化输出代码
# print(soup.prettify())


# Tag节点
# 标签（Tag）是组成 HTML 文档的基本元素。
# 在 BS4 中，通过标签名和标签属性可以提取出想要的内容。看一组简单的示例：

# 获取整个p标签的html代码
# print(soup.p)


# 获取b标签
# print(soup.p.b)


# 重点
# 获取标签的文本内容
# print(soup.p.b.text)


# 获取标签的属性值
# print(soup.p.get("class"))


# 返回一个字典，里面是多有属性和值
# print(soup.p.attrs)


# 查看返回的数据类型
# print(type(soup.p))


# 根据属性，获取标签的属性值，返回值为列表
# print(soup.p['class'])


# 子节点
# 一个Tag可能包含多个字符串或其它的Tag,这些都是这个Tag的子节点.
# Beautiful Soup提供了许多操作和遍历子节点的属性.

# 通过点取属性的方式只能获得当前名字的第一个tag:
# print(soup.a)


# 父节点
# 每个tag或字符串都有父节点:被包含在某个tag中
# parent
# 通过 parent 属性来获取某个元素的父节点.

# 获取a标签的父节点
# print(soup.a.parent)


# 兄弟节点
# next_sibling 和 previous_sibling
# 在文档树中,使用 next_sibling 和 previous_sibling属性来查询兄弟节点:

# 下一个兄弟节点
# print(soup.a.next_sibling)

# 上一个兄弟节点
# print(soup.b.previous_sibling)


# 搜索文档树
# Beautiful Soup定义了很多搜索方法,这里着重介绍2个: find()和find_all()

# 查找对应属性值的标签
# print(soup.find("a", id="link2"))

# 查找全部的a标签
# print(soup.find_all("a", class_="sister"))

# limit参数
# 限制抓取a标签的个数
# print(soup.find_all("a", limit=2))


# css选择器
# Beautiful Soup支持大部分的CSS选择器 ，
# 在Tag或BeautifulSoup对象的.select()方法中传入字符串参数,
# 即可使用CSS选择器的语法找到tag:
# print(soup.select("a"))


# 通过tag标签逐层查找
# print(soup.select("body a"))

# 标签下的直接子标签
# print(soup.select("head > title"))

# 通过css类名查找
# print(soup.select(".sister"))  # .代表class


# 通过tag的id查找
print(soup.select("#link1"))
print(soup.select("a#link2"))
